package controllers

import (
	"ShopSupplierApi/models"
	"ShopSupplierApi/utils"
	"encoding/json"
	"errors"

	"github.com/astaxie/beego"
)

//LcfController 自定义控制器
//扩展部分自定义方法
type LcfController struct {
	beego.Controller
}

//Error404 404错误
func (c *LcfController) Error404() {
	c.JSONFailed(404, "页面丢失")
}

//Error501 500错误
func (c *LcfController) Error500() {
	c.JSONFailed(500, "服务异常")
}

//JSONSuccess 返回成功结果
func (c *LcfController) JSONSuccess(v interface{}) {
	c.Data["json"] = map[string]interface{}{"code": 0, "data": v}
	c.ServeJSON()
}

//JSONFailed 返回失败结果
func (c *LcfController) JSONFailed(code int, msg string) {
	c.Data["json"] = map[string]interface{}{"code": code, "msg": msg}
	c.ServeJSON()
}

//JSONFailedError 根据utils.ErrorEnum返回错误信息
func (c *LcfController) JSONFailedError(err utils.ErrorEnum) {
	c.Data["json"] = err
	c.ServeJSON()
}

//ParseBodyToPage 解析Body中Page信息
func (c *LcfController) ParseBodyToPage(p ...*models.Page) error {
	if p != nil && len(p) > 0 {
		c.Data["page"] = p[0]
	} else {
		c.Data["page"] = &models.Page{}
	}
	err := json.Unmarshal(c.Ctx.Input.RequestBody, c.Data["page"])
	if err != nil || c.Data["page"].(*models.Page).Length < 0 {
		c.JSONPageData(nil) //返回空分页信息
		err = errors.New("page is empty")
	}
	return err
}

//JSONPageData 返回分页数据
func (c *LcfController) JSONPageData(v interface{}) {
	if v == nil {
		c.JSONSuccess(map[string]interface{}{"list": []string{}, "rows": 0})
		return
	}
	rows := int64(0)
	if value, ok := c.Data["page"].(*models.Page); ok {
		rows = value.Rows
	}
	c.JSONSuccess(map[string]interface{}{"list": v, "rows": rows})
}

//JSONParseBody 按JSON方式解析Body内容.
// v 解析结果对象
func (c *LcfController) JSONParseBody(v interface{}) error {
	err := json.Unmarshal(c.Ctx.Input.RequestBody, v)
	if err != nil {
		c.JSONFailedError(utils.UnmarshalError)
	}
	return err
}
